#include<unistd.h>
#include<stdio.h>
#include<sys/types.h>
#include<stdlib.h>
#include<sys/wait.h>

// int main()
// {
//     //char* path =  getenv(PATH)

//     pid_t id = fork();
//     if(id == 0)
//         //子进程
//     {
//         printf("我是子进程，我要进行进程替换:ls\n");
//         sleep(2);

//         int err = execl("/usr/bin/ls","ls","-a","-l");

//         if(err == -1)
//         {
//             perror("execl:");
//             exit(1);
//         }

//     }
//         //父进程
//     {
//         printf("我是父进程,等待子进程退出\n");
//         sleep(3);
//         int status = 0;
//         pid_t rid = waitpid(id,&status,0);
//         if(WIFEXITED(status))
//         {
//             printf("%d\n",WEXITSTATUS(status));
//         }
//     }

//     return 0;
// }

// void oper()
// {
//     sleep(1);
//     printf("等待不妨碍做其他事\n");
// }

// int main()
// {
//     pid_t id = fork();
//     if(id == 0)
//     {
//         printf("我是子进程，5秒后退出\n");
//         sleep(5);
//         exit(0);
//     }
//     else
//     {
//         int status = 0;
//         printf("我是父进程，等待子进程退出\n");
//         while(1)
//         {
//             pid_t rid = waitpid(id,&status,WNOHANG);
//             if(rid > 0)
//             {
//                 printf("父进程等到子进程退出\n");
//                 break;
//             }
//             oper();
//         }
//     }

//     return 0;
// }

int main()
{
    pid_t id = fork();
    if(id == 0)
    {
        int* p = NULL;
        *p = 10;
        exit(0);
    }
    else
    {
        int status = 0;
        wait(&status);
        printf("%d\n",status);
        if(WIFEXITED(status))
        {
            printf("程序正常退出：%d\n",WEXITSTATUS(status));
        }
        else
        {
            printf("程序挂了：%d\n",(status&0x7f));
        }
    }

    return 0;
}
